﻿using System;
namespace OpGen.Extensions.Network
{
    /// <summary>
    /// Stellt eine Schnittstelle für eine Netzwerkverbindung dar
    /// </summary>
    public interface IConnection
    {
        /// <summary>
        /// Wird aufgerufen wenn der Client die Verbindung unterbricht
        /// </summary>
        event DisconnectDelegate ClientDisconnect;

        /// <summary>
        /// Wird aufgerufen wenn der Client Daten sendet
        /// </summary>
        event ReceiveDelegate ClientReceive;

        /// <summary>
        /// Trennt die Verbindung zum Client
        /// </summary>
        void Close();

        /// <summary>
        /// Liefert eine eindeutige ID der Verbindung
        /// </summary>
        Guid ID { get; }

        /// <summary>
        /// Sendet die Daten an diesen Client
        /// </summary>
        /// <param name="data">Die Daten die übermittelt werden sollen</param>
        void Send(byte[] data);
    }
}
